package com.example.controller;

import com.example.Service.ImageService;
import com.example.entity.RestBean;

import com.example.utils.Const;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * 作者:xuSen
 * 日期2025/4/25 12:45
 */
// 使用slf4j日志框架记录日志
// RestController注解表明这是一个Spring MVC的RESTful控制器
// RequestMapping注解用于映射请求到类或类中的具体方法
@Slf4j
@RestController
@RequestMapping("/api/image")
public class ImageController {

    // Resource注解用于自动装配ImageService接口的实例
    @Resource
    private ImageService imageService;

    /**
     * 上传用户头像的接口
     * 该方法接收一个multipart文件作为头像，并限制其大小不超过100KB
     * 如果文件大小超过限制，返回错误信息
     * 否则，调用ImageService的uploadAvatar方法上传头像
     * 如果上传成功，返回成功信息和头像的URL；如果上传失败，返回错误信息
     *
     * @param file 用户头像文件
     * @param id 用户ID，用于确定头像所属的用户
     * @return RestBean<String> 包含上传结果和头像URL的响应对象
     * @throws IOException 如果文件读写过程中发生错误
     */
    @PostMapping("/avatar")
    public RestBean<String> uploadAvatar(@RequestParam("file") MultipartFile file,
                                         @RequestAttribute(Const.ATTR_USER_ID) int id) throws IOException {
        // 检查文件大小是否超过100KB的限制
        if (file.getSize() > 1024 * 100)
            return RestBean.failure(400, "文件图片不能大于100kb");
        // 记录上传头像的日志
        log.info("上传头像");
        // 调用服务层方法上传头像
        String url = imageService.uploadAvatar(file, id);
        // 根据上传结果返回相应的响应
        if (url == null) {
            log.info("上传失败");
            return RestBean.failure(500, "上传失败");
        } else {
            log.info("上传成功");
            return RestBean.success(url);
        }
    }
}














